package com.engine.salary.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;

public class FileUtils {
    private static final String COPY_FILE_SUFFIX = "_副本";

    /**
     * 将输入流写入文件
     * @param in 输入流
     * @param path 输出文件的路径
     * @param fileName 输出文件的名称
     *
     * */
    public static void writeFile(InputStream in , String path , String fileName) throws FileNotFoundException {

        FileOutputStream outputStream = new FileOutputStream("");

    }


    /**
     * 给定一个目录和文件，若该目录存在名称相同的文件，则返回一个可用的副本文件名，否则直接返回输入的文件名。
     * @param path 文件的目录
     * @param fileName 文件名
     * @return 可用的文件名
     * */
    public static String getAvailableName(String path ,String fileName){

        File filePath = new File(path);

        String suffix = fileName.substring(fileName.lastIndexOf("."));
        File[] files = filePath.listFiles( f -> f.getName().endsWith(suffix) );
        if ( Objects.isNull(files) ) return fileName;

        Set<String> fileNameSet = new HashSet<>();
        for (File file: files ) {
            fileNameSet.add(file.getName().substring(0 , file.getName().lastIndexOf(".")));
        }

        boolean isExist = true;
        int count = 1;
        String tempFileName = fileName.substring(0,fileName.lastIndexOf("."));
        String tempFileName1 = tempFileName;
        while(isExist){

            if (fileNameSet.contains(tempFileName)){
                tempFileName = tempFileName1 + COPY_FILE_SUFFIX + count++;
            }else{
                isExist = false;
            }

        }

        return tempFileName + suffix;
    }


    /**
     * 给定一个文件的完整路径，若该文件已经存在，则返回一个可用的副本文件名，否则直接返回输入的文件名。
     * @param fullPath 文件的完整路径
     * @return 可用的文件名
     * */
    public static String getAvailableName( String fullPath ){
        File file = new File(fullPath);
        if ( !file.isFile() ) throw new RuntimeException( String.format("not a file [%s].",fullPath));

        return getAvailableName( file.getParent() ,file.getName() );
    }

    /**
     * 给定一个文件的完整路径，若该文件已经存在，则返回一个完整可用的副本文件名，否则直接返回输入的文件名。
     * @param fullPath 文件的完整路径
     * @return 完整可用的文件名
     * */
    public static String getAvailableFullName( String fullPath ){
        File file = new File(fullPath);
        if ( !file.isFile() ) throw new RuntimeException( String.format("not a file [%s].",fullPath));

        return file.getParent() + File.separator + getAvailableName(fullPath);
    }
}
